package ys.ewp.service;

import java.util.LinkedHashMap;
import java.util.List;

import ys.ewp.dao.BaseDao;

public abstract class BaseService<T> {
	
	protected abstract  BaseDao<T> getDao();
	
	/**
	 * @功能 获得第一个对象
	 */
	public T getFirst(){
		LinkedHashMap<String, String> orderby = new LinkedHashMap<String, String>();
		orderby.put("id", "asc");
		
		List<T> list =getDao().getListByNum(1,orderby);
		if(list.size()>0){
			return list.get(0);
		}else{
			return null;
		}
	}
	
	/**
	 * @功能 获得最后一个对象
	 */
	public T getLast(){	
		LinkedHashMap<String, String> orderby = new LinkedHashMap<String, String>();
		orderby.put("id", "desc");
		
		List<T> list =getDao().getListByNum(1,orderby);
		if(list.size()>0){
			return list.get(0);
		}else{
			return null;
		}
	}
	
	/**
	 *@功能  清除一级缓存的数据
	 */
	public void clear(){
		getDao().clear();
	}
	
	/**
	 *@功能  获取实体
	 */
	public T get(Class<T> clazz, Integer id){
		return getDao().get(clazz, id);
	}
	
	/**
	 *@功能  获取实体
	 */
	public T get(Integer id){
		return getDao().get(id);
	}
	
	/**
	 *@功能  保存实体
	 */
	public void save(T clazz){
		getDao().save(clazz);
	}
	
	/**
	 *@功能  更新实体
	 */
	public void update(T clazz){
		getDao().update(clazz);
	}
	
	/**
	 *@功能  批量更新实体
	 */
	public void batchUpdate(List<T> clazzs){
		for(T t : clazzs){
			getDao().update(t);
		}
	}
	
	/**
	 *@功能  删除实体
	 */
	public void delete(Integer id){
		getDao().delete(id);
	}
	
	/**
	 *@功能  删除实体
	 */
	public void delete(T clazz){
		getDao().delete(clazz);
	}
	
	/**
	 *@功能  批量删除实体
	 */
	public void batchDelete(List<T> clazzs){
		for(T t : clazzs){
			this.delete(t);
		}
	}
	
	/**
	 *@功能  获取记录总数
	 */
	public Long getCount(){
		return this.getCount(null, null);
	}
	
	/**
	 *@功能  获取记录总数
	 *@param where 查询条件
	 *@param params 参数
	 */
	public Long getCount(String where,Object[] params){
		return this.getDao().getCount(where,params);
	}
	
	/**
	 *@功能  获得指定数量对象
	 *@param num 获取的数量
	 */
	public List<T> getListByNum(Integer num){
		return this.getListByNum(num, null, null);
	}
	
	/**
	 * @功能 获得指定数量对象
	 * @param num 获取的数量
	 * @param where 查询条件
	 * @param params 查询参数
	 */
	public List<T> getListByNum(Integer num,String where,Object[] params){
		return this.getDao().getListByNum(num,where,params);
	}
	
	/**
	 * @功能 获得所有对象
	 */
	public List<T> getList(){
		return this.getList(null, null, null);
	}
	
	/**
	 * @功能 获得所有对象
	 * @param where 查询条件
	 * @param params 查询参数
	 * @param orderby 排序
	 */
	public List<T> getList(String where,Object[] params,LinkedHashMap<String, String> orderby){
		return this.getDao().getList(where,params,orderby);
	}
	
	/**
	 * @功能 获取分页数据
	 */
	public List<T> getPageList(Integer firstResult, Integer maxResults, String where, Object[] params, LinkedHashMap<String, String> orderby){
		return this.getDao().getPageList(firstResult, maxResults, where, params, orderby);
	}
	
	
}
